//////////////////////////////////////////////////////////////////////
// CubemapBMP.h
//
// SHEN Fangyang
// me@shenfy.com
//
// Copyright (C) SHEN Fangyang, 2011, All rights reserved.
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////
//  Brief Description
//
//	Cubemap in BMP format
//
//////////////////////////////////////////////////////////////////////
#pragma once

#include <CubemapTmpl.h>
#include <BMPImg.h>

namespace PRT
{
	template<typename T>
	class CCubemapBMP :
		public CCubemapTmpl<T>
	{
	public:
		CCubemapBMP(void);
		virtual ~CCubemapBMP(void);

		virtual bool LoadFromFile(TCHAR *fn);
		virtual bool WriteToFile(TCHAR *fn);
	};

	template<typename T>
	CCubemapBMP<T>::CCubemapBMP()
	{
	}

	template<typename T>
	CCubemapBMP<T>::~CCubemapBMP()
	{
	}

	template<typename T>
	bool CCubemapBMP<T>::LoadFromFile(TCHAR *fn)
	{
		if (m_pImg)
		{
			delete m_pImg;
			m_pImg = 0;
		}

		m_pImg = new w32lib::_CBMPImgTmpl<T>();
		if (!m_pImg)
		{
			w32lib::CLogger::Instance()->Error(_T("Failed to allocate memory for image!"));
			return false;
		}

		w32lib::_CBMPImgTmpl<T> *pImg = dynamic_cast<w32lib::_CBMPImgTmpl<T> *>(m_pImg);
		pImg->LoadFromFile(fn);
		ResetFaceSize();

		return true;
	}

	template<typename T>
	bool CCubemapBMP<T>::WriteToFile(TCHAR *fn)
	{
		if (!m_pImg)
			return false;

		w32lib::_CBMPImgTmpl<T> *pImg = dynamic_cast<w32lib::_CBMPImgTmpl<T> *>(m_pImg);
		return pImg->WriteToFile(fn);
	}
}